﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace Workflow.Common.FileUtil
{
	public static class FileUtil
	{
		public static void CopyFolder(string fromPath, string toPath)
		{
			//如果源文件夹不存在，则创建
			if (!Directory.Exists(fromPath))
			{
				Directory.CreateDirectory(fromPath);
			}

			//取得要拷贝的文件夹名
			string strfoldername = fromPath.Substring(fromPath.LastIndexOf("\\") + 1, fromPath.Length - fromPath.LastIndexOf("\\") - 1);

			//如果目标文件夹中没有源文件夹则在目标文件夹中创建源文件夹
			if (!Directory.Exists(toPath + "\\" + strfoldername))
			{
				Directory.CreateDirectory(toPath + "\\" + strfoldername);
			}
			//创建数组保存源文件夹下的文件名
			string[] strfiles = Directory.GetFiles(fromPath);

			//循环拷贝文件
			for (int i = 0; i < strfiles.Length; i++)
			{
				//取得拷贝的文件名，只取文件名，地址截掉。
				string strfilename = strfiles[i].Substring(strfiles[i].LastIndexOf("\\") + 1, strfiles[i].Length - strfiles[i].LastIndexOf("\\") - 1);
				//开始拷贝文件,true表示覆盖同名文件
				File.Copy(strfiles[i], toPath + "\\" + strfoldername + "\\" + strfilename, true);
			}

			//创建directoryinfo实例
			DirectoryInfo dirinfo = new DirectoryInfo(fromPath);
			//取得源文件夹下的所有子文件夹名称
			DirectoryInfo[] zipath = dirinfo.GetDirectories();
			for (int j = 0; j < zipath.Length; j++)
			{
				//获取所有子文件夹名
				string strzipath = fromPath + "\\" + zipath[j].ToString();
				//把得到的子文件夹当成新的源文件夹，从头开始新一轮的拷贝
				CopyFolder(strzipath, toPath + "\\" + strfoldername);
			}
		}

		/// <summary>
		/// 获得指定文件夹下面的所有文件全路径
		/// </summary>
		/// <param name="fromPath"></param>
		/// <returns></returns>
		public static List<string> GetAllFile(string fromPath)
		{
			//创建数组保存源文件夹下的文件名
			List<string> allFiles = new List<string>();

			if(!Directory.Exists(fromPath))
			{
				return allFiles;
			}
			var tempFiles =  Directory.GetFiles(fromPath).ToList();
			allFiles.AddRange(tempFiles);

			//创建directoryinfo实例
			DirectoryInfo dirinfo = new DirectoryInfo(fromPath);
			DirectoryInfo[] zipath = dirinfo.GetDirectories();
			for (int j = 0; j < zipath.Length; j++)
			{
				//获取所有子文件夹名
				string strzipath = fromPath + "\\" + zipath[j].ToString();
				//把得到的子文件夹当成新的源文件夹，从头开始新一轮的拷贝
				allFiles.AddRange(GetAllFile(strzipath));
			}

			return allFiles;
		}


        public static bool FileExist(String FilePath) {

            return File.Exists(FilePath);
        }

	}
}
